package guava;

import com.google.common.base.Joiner;
import com.google.common.base.Splitter;
import com.google.common.collect.Lists;

import java.util.List;

/**
 * Joiner是连接器，Splitter是分割器，
 * 通常我们会把它们定义为static final，利用on生成对象后在应用到String进行处理，这是可以复用的。
 * 要知道apache commons StringUtils提供的都是static method。
 * 对于Joiner，常用的方法是 跳过NULL元素：skipNulls()
 * 对于NULL元素使用其他替代：useForNull(String)对于Splitter。
 *
 * 常用的方法是：trimResults()/omitEmptyStrings()。
 * 注意拆分的方式，有字符串，还有正则，还有固定长度分割
 *
 * @author Daniel
 */
public class JoinerSplitterTest {

    /**
     * 连接器：以逗号连接，忽略null
     */
    private static final Joiner JOINER_SKIP_NULL = Joiner.on(",").skipNulls();

    /**
     * 连接器：以逗号连接，将null替换成空格
     */
    private static final Joiner JOINER_USE_FOR_NULL = Joiner.on(",").useForNull("null");

    /**
     * 分割器：以逗号分隔，去掉前后空白字符，忽略空字符串
     */
    private static final Splitter SPLITTER = Splitter.on(",").trimResults().omitEmptyStrings();

    public static void main(String[] args) {
        joinTest1();
        joinTest2();

        splitTest();
    }

    private static void splitTest() {
        String data = "a, ,b";

        Iterable<String> iterable = SPLITTER.split(data);
        iterable.forEach(System.out::println);
    }

    private static void joinTest1() {
        List<String> data = Lists.newArrayList("a", null, "b");

        String join = JOINER_SKIP_NULL.join(data);
        System.out.println("join = " + join);
    }
    private static void joinTest2() {
        List<String> data = Lists.newArrayList("a", null, "b");

        String join1 = JOINER_USE_FOR_NULL.join(data);
        System.out.println("join1 = " + join1);
    }

}
